import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import checker from 'vite-plugin-checker'
import { vite as vidstack } from 'vidstack/plugins';
import legacy from '@vitejs/plugin-legacy'
import * as path from 'path'
import * as dotenv from 'dotenv'
// dotenv.config() // 默认读取.env文件
dotenv.config({path: '.env.developmenting'}) // 指定读取.env.developmenting文件并将.env.developmenting中的环境变量添加到process.env中
const port = process.env.PORT ? parseInt(process.env.PORT, 10) : 9522;

// process.argv - process.argv[0] - 获取命令参数 
// config 将读取你的 .env 文件，解析内容，将其分配给 process.env，并返回一个包含已加载内容的 parsed 键的对象，如果失败则返回 error 键。
// dotenv.config(object | null) - 默认加载 .env 文件。参数 - { path: .env | string }，例：dotenv.config({path: '.env.production'})

// detenv.parse() - 将目标解析为object
// 示例：
/*
const dotenv = require('dotenv')
const buf = Buffer.from('BASIC=basic')
const config = dotenv.parse(buf) // will return an object
console.log(typeof config, config) // object { BASIC : 'basic' }
*/

/*
  package.json中，关于vite 和 vite build中，--mode 的设置
  vite dev 默认为 development，vite build 默认为 production
  也可以自定义：
  1. vite dev --mode production
  2. vite build --mode production
  3. vite build --mode development

  --mode后面的模式名称（production、development、stage等，当然，你也可以自定义：stageing），但是必须为字符串，不能为数字，否则会报错。
  并且如果想要取得相关文件内的环境变量，必须要有与该值一致的.env文件，如：.env.production、.env.development等。
*/
// https://vitejs.dev/config/
export default defineConfig(({ mode, command }) => {
  const env = loadEnv(mode, process.cwd())
  return {
    plugins: [
      vue({
        template: {
          compilerOptions: {
            isCustomElement: (tag) => tag.startsWith('media-'),
          },
        },
      }),
      vidstack(),
      {
        ...checker({
          typescript: true
        }),
        enforce: 'post'
      },
      legacy({
        targets: ['defaults', 'not IE 11'],
      }),
    ],
    resolve: {
      alias: {
        '@': path.resolve(__dirname, './src')
      }
    },
    server: {
      port: port,
      proxy: {
        // https://cn.vitejs.dev/config/#server-proxy
        'api': {
          // target: 'http://vue.ruoyi.vip/prod-api/',
          // target: 'http://192.168.3.3:8080',
          target: 'http://192.168.3.3:3000',
          changeOrigin: true,
          rewrite: path => path.replace(new RegExp('^' +  env.VITE_APP_BASE_API), '')
        }
      }
    },
    publicDir: 'public',
    // publicDir: process.env.PUBLIC,
    build:{
      assetsInlineLimit: 1, // 最小大小限制为 1 字节，小于此容量的文件直接为base64 编码
      watch: {
        // 监听文件变化
        include: ['src/**/*.ts', 'src/**/*.vue'],
        // 忽略文件变化
        exclude: ['node_modules/**/*', 'dist/**/*'],
      },
      rollupOptions: {
        // output: {
        //   chunkFileNames: 'assets/js/[name]-[hash].js',
        //   entryFileNames: 'assets/js/[name]-[hash].js',
        //   assetFileNames: 'assets/[ext]/[name]-[hash].[ext]',
        // }
      },
      outDir: 'dist',
    },
    base: '/', // 开发或生产环境服务的公共基础路径
  }
})
